unit TuristikUt;

interface
uses
Forms, Windows, Controls, Classes, SysUtils;
const
csFormatoFecha = 'yyyy-mm-dd'; // Formato de Interbase/Firebird
procedure ReemplazarWhere(p_SQL: TStrings; p_where: String);
function ConfirmarOperacion(Msg:string; BtnSiDefecto:boolean = true):Boolean;
function DateToSQL(Fecha: TDate): String;
var
  vCodigoBusqueda, vCodigoBusquedaPT, vNombreBusqueda, vNombreBusquedaS,
  vNombreBusquedaPT, vNacionalidad, vRuc, vCedula, vOtroDocumento, vTelefono,
  vCelular, vEmail, vFechaPartidaPT, vFechaLlegadaPT, vCodHospedajePT,
  vCodigoBusquedaReserva, vNombreBusquedaReserva, vCostoSGL, vCostoDBL, vCostoTPL, vCostoCPL,
  vCostoSinHotel, vTipoMoneda, vEntidad, vNombreBusquedaCat,
  vNombreBusquedaProv, vNombreBusquedaProveedor, vDocumentoBusquedaProv, vNombreBusqCamp: String;
  vCodigoBusquedaProv, vCodigoBusqCamp, vCodigoBusquedaCat, vCodigoBusquedaS: Integer;



implementation

function ConfirmarOperacion(Msg:string; BtnSiDefecto:boolean = true):Boolean;
var BtnDefecto: Longint;
begin
  if BtnSiDefecto then
    btnDefecto:=  MB_DEFBUTTON1
  else
    btnDefecto:=  MB_DEFBUTTON2;
  Result := Application.Messagebox(Pchar(Msg), Pchar('ADVERTENCIA'), MB_ICONQUESTION + MB_YESNO + btnDefecto) = mrYes;
end;

{ Convierte una fecha en formato Firebird }
function DateToSQL(Fecha: TDate): String;
begin
  Result := QuotedStr(FormatDateTime(csFormatoFecha, Fecha));
end;

procedure ReemplazarWhere(p_SQL: TStrings; p_where: String);
var
  TextoSQL, Txt2: String;
  posi, posi2, i, x: Integer;
begin
  posi2 := AnsiPos('ORDER BY', UpperCase(Trim(p_SQL.Text)));
  posi := 0;
  i := AnsiPos('WHERE', UpperCase(Trim(p_SQL.Text)));
  Txt2 := Trim(p_SQL.Text);

  while i > 0 do
  begin
    posi := posi + i + 5;
    x := AnsiPos('(', Copy(Txt2, 1, i - 1));

    if x = 0 then
    begin
      i := 0;
      posi := posi - 6;
    end
    else
    begin
      x := AnsiPos('SELECT', Copy(Txt2, 1, i - 1));

      if (x <= 1) then
      begin
        if AnsiPos('SELECT', Copy(Txt2, x + 6, i - 1)) = 0 then
          i := 0;

        posi := posi - 6;
        Txt2 := Trim(Copy(Txt2, i + 5, Length(Txt2)));
      end
      else
      begin
        Txt2 := Trim(Copy(Txt2, i + 5, Length(Txt2)));
        i := AnsiPos('WHERE', Txt2);

        if i = 0 then
          posi := posi2 - 1;
      end; // if
    end; // if
  end; // while

  if posi > 0 then // ya tiene where
  begin
    if p_where <> EmptyStr then
      TextoSQL := Copy(p_SQL.Text, 1, posi) + 'WHERE ' + p_where
    else
      TextoSQL := Copy(p_SQL.Text, 1, posi - 1);
  end
  else
  begin
    TextoSQL := Trim(p_SQL.Text);

    if p_where <> EmptyStr then
      if posi2 > 0 then
        Insert(' WHERE ' + p_where, TextoSQL, posi2 - 1)
      else
        TextoSQL := Trim(TextoSQL) + ' WHERE ' + p_where;
  end; // if

  if (posi2 > 0) and (posi > 0) then
    TextoSQL := Trim(TextoSQL) + ' ' +
      Copy(p_SQL.Text, posi2, Length(p_SQL.Text) - posi2);

  p_SQL.Text := Trim(TextoSQL);
end;

end.
